/**
 * 
 * 璧疯开绉戞妧 Copyright (c) 2014-2017 QiDi,Inc.All Rights Reserved.
 */
package cn.qidisoft.edu.hzjt.utils;

import java.util.HashMap;
import java.util.Map;

import cn.qidisoft.core.util.PropertiesMapUtil;

/**
 * 代码信息表
 * 
 * @author hxq
 * @version $Id: StandCodeUtil.java, v 0.1 2018年10月29日 下午4:59:11 hxq Exp $
 */
public class StandCodeUtil {
  /**
   * 定义配置文件
   */
  private static String codeFileName = "sysCode.properties";
  /**
   * 加载配置文件
   */
  private static Map<String, String> data = PropertiesMapUtil.loadFile(codeFileName);
  private static String keyCode = null;
  private static final String prefix = "-";
  private static final String prefix2 = ".";

  /**
   * 
   * 通过序列号获得没有二级节点的所都标准代码信息
   * 
   * @param serialNo
   * @return
   */
  public static Map<String, String> getStandAllNotNodeCode(String serialNo) {
    keyCode = serialNo;
    if (keyCode != null && !keyCode.equals("")) {
      Map<String, String> standAllCodeList = new HashMap<String, String>();
      for (String key : data.keySet()) {
        if (key.startsWith(keyCode + prefix)) {
          standAllCodeList.put(key.split(prefix)[1],
              data.get(keyCode + prefix + key.split(prefix)[1]));
        }
      }
      return standAllCodeList;
    } else {
      return null;
    }

  }

  /**
   * 
   * 通过序列号获得所都标准代码信息（包含有二级节点）
   * 
   * @param serialNo
   * @return
   */
  public static Map<String, String> getStandAllCode(String serialNo) {
    keyCode = serialNo;
    if (keyCode != null && !keyCode.equals("")) {
      Map<String, String> standAllCodeList = new HashMap<String, String>();
      for (String key : data.keySet()) {
        if (key.startsWith(keyCode + prefix)) {
          standAllCodeList.put((key.split(prefix)[1]).split(prefix2)[1],
              data.get(keyCode + prefix + key.split(prefix)[1]));
        }
      }
      return standAllCodeList;
    } else {
      return null;
    }

  }

  /**
   * 通过序列号和代码获得指定的标准代码信息
   * 
   * @param serialNo
   * @param code
   * @return
   */
  public static Map<String, String> getStandFirstCode(String serialNo, String code) {
    keyCode = serialNo + prefix + code;
    if (keyCode != null && !keyCode.equals("")) {
      Map<String, String> standAllCodeList = new HashMap<String, String>();
      for (String key : data.keySet()) {
        if (key.equals(keyCode)) {
          standAllCodeList.put(code, data.get(keyCode));
        }
      }
      return standAllCodeList;
    } else {
      return null;
    }
  }

  /**
   * 通过code获得带一级节点下的代码名称
   * 
   * @param serialNo
   * @param code
   * @return
   */
  public static String getStandFirstName(String serialNo, String code) {
    keyCode = serialNo + prefix + code;
    if (keyCode != null && !keyCode.equals("")) {
      return data.get(keyCode);
    } else {
      return null;
    }
  }

  /**
   * 通过code获得带二级节点下的代码名称
   * 
   * @param serialNo
   * @param code
   * @return
   */
  public static Map<String, String> getStandSecondCode(String serialNo, String code) {
    keyCode = serialNo + prefix + code;
    if (keyCode != null && !keyCode.equals("")) {
      Map<String, String> standAllCodeList = new HashMap<String, String>();
      for (String key : data.keySet()) {
        if (key.startsWith(keyCode + prefix2)) {
          standAllCodeList.put(key.split(prefix)[1].split(prefix2)[1],
              data.get(serialNo + prefix + key.split(prefix)[1]));
        }
      }
      return standAllCodeList;
    } else {
      return null;
    }
  }

  /**
   * 通过一级节点代码+二级节点代码获得标准代码信息
   * 
   * @param serialNo
   * @param code1
   * @param code2
   * @return
   */
  public static Map<String, String> getStandThirdCode(String serialNo, String code1, String code2) {
    keyCode = serialNo + prefix + code1 + prefix2 + code2;
    if (keyCode != null && !keyCode.equals("")) {
      Map<String, String> standAllCodeList = new HashMap<String, String>();
      for (String key : data.keySet()) {
        if (key.equals(keyCode)) {
          standAllCodeList.put(code2, data.get(keyCode));
        }
      }
      return standAllCodeList;
    } else {
      return null;
    }
  }

  /**
   * 获得带有二级节点下的标准代码名称
   * 
   * @param serialNo
   * @param code1
   * @param code2
   * @return
   */
  public static String getStandThirdName(String serialNo, String code1, String code2) {
    keyCode = serialNo + prefix + code1 + prefix2 + code2;
    if (keyCode != null && !keyCode.equals("")) {
      return data.get(keyCode);
    } else {
      return null;
    }
  }

  /**
   * 通过代码名称获得代码Key
   * 
   * @param name
   * @return
   */
  public static String getStandCodeName(String name) {
    String code = null;
    if (name != null && !name.equals("")) {
      Map<String, String> nationList = new HashMap<String, String>();
      for (Map.Entry entry : data.entrySet()) {
        if (name.equals(entry.getValue())) {
          keyCode = (String) entry.getKey();
          String[] keyCodes = keyCode.split("-");
          if (keyCodes[1].indexOf(".") != -1) {
            code = keyCodes[1].substring(keyCodes[1].indexOf(".") + 1, keyCodes[1].length());
          } else {
            code = keyCodes[1];
          }
          break;
        }
      }
    } else {
      return null;
    }
    return code;
  }
}
